package cn.seifly.module.wp.dao.mysql.postmeta;

import cn.seifly.framework.mybaits.BaseMapperX;
import cn.seifly.module.wp.comm.Constants;
import cn.seifly.module.wp.dao.dataobject.posts.PostmetaDO;
import cn.seifly.module.wp.dto.PostmetaPageReqVO;
import cn.seifly.framework.core.page.PageResult;
import cn.seifly.framework.mybaits.LambdaQueryWrapperX;
import org.apache.ibatis.annotations.Mapper;


/**
 * 文章元数据 Mapper
 *
 * @author www.seifly.cn 2025-04-18
 */
@Mapper
public interface PostmetaMapper extends BaseMapperX<PostmetaDO> {

    default PageResult<PostmetaDO> selectPage(PostmetaPageReqVO reqVO) {

        LambdaQueryWrapperX<PostmetaDO> wrapperX =    new LambdaQueryWrapperX<PostmetaDO>()
                .eqIfPresent(PostmetaDO::getPostId, reqVO.getPostId())
                .eqIfPresent(PostmetaDO::getMetaKey, reqVO.getMetaKey())
                .eqIfPresent(PostmetaDO::getMetaValue, reqVO.getMetaValue())
                .inIfPresent(PostmetaDO::getMetaKey, reqVO.getMetaKeys())
                .inIfPresent(PostmetaDO::getPostId, reqVO.getPostIdList());
                //.orderByDesc(PostmetaDO::getMetaId);
        if("likes".equals(reqVO.getSort())){
            wrapperX.eqIfPresent(PostmetaDO::getMetaKey, Constants.LIKES_COUNT);
            wrapperX.orderByDesc(PostmetaDO::getMetaValue,PostmetaDO::getMetaId);
        }else if("views".equals(reqVO.getSort())){
            wrapperX.eqIfPresent(PostmetaDO::getMetaKey, Constants.VIEWS_COUNT);
            wrapperX.orderByDesc(PostmetaDO::getMetaValue,PostmetaDO::getMetaId);
        }else if("favorites".equals(reqVO.getSort())){
            wrapperX.eqIfPresent(PostmetaDO::getMetaKey, Constants.FAVORITES_COUNT);
            wrapperX.orderByDesc(PostmetaDO::getMetaValue,PostmetaDO::getMetaId);
        }
        return selectPage(reqVO,wrapperX);
    }

}